package vip.liux.backend.infrastructure.excel.handler;

import vip.liux.backend.infrastructure.excel.ExportContext;

import java.io.OutputStream;

/**
 * sheet 写出处理器接口，定义导出 Excel 的通用操作
 *
 * @author JiaDu
 * @version 1.0.0
 * @since 2023/10/12
 */
public interface SheetWriteHandler {

    /**
     * 判断是否支持当前对象的写出
     *
     * @param obj 返回对象
     * @return 是否支持
     */
    boolean support(Object obj);

    /**
     * 校验导出上下文配置是否合法
     *
     * @param exportContext 导出上下文
     */
    void check(ExportContext exportContext);

    /**
     * 导出数据到输出流
     *
     * @param o             数据对象
     * @param outputStream  输出流
     * @param exportContext 导出上下文
     */
    void export(Object o, OutputStream outputStream, ExportContext exportContext);

    /**
     * 写出数据到输出流
     *
     * @param o             数据对象
     * @param outputStream  输出流
     * @param exportContext 导出上下文
     */
    void write(Object o, OutputStream outputStream, ExportContext exportContext);

}